define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) {

    var Controller = {
        // 添加全局状态管理
        _initialized: {
            common: false,
            commonAdd: false,
            tabs: false
        },
        
        index: function () {
            // 防止重复加载common模块
            if (!Controller._initialized.common) {
                require(['../common/index'], function() {
                    Controller._initialized.common = true;
                    // 通用功能加载完成后的回调
                });
            }

            // 初始化表格参数配置
            Table.api.init({
                extend: {
                    index_url: 'slider/slider/index',
                    add_url: 'slider/slider/add',
                    edit_url: 'slider/slider/edit',
                    del_url: 'slider/slider/del',
                    multi_url: 'slider/slider/multi',
                    table: 'fs_slider',
                }
            });

            // 防止重复初始化选项卡
            if (!Controller._initialized.tabs) {
                Controller.api.initTabs();
                Controller._initialized.tabs = true;
            }

            // 默认加载城市首页数据
            Controller.api.loadTabData('city-home');
        },
        
        add: function () {
            // 防止重复加载commonAdd模块
            if (!Controller._initialized.commonAdd) {
                require(['backend/common/add'], function() {
                    Controller._initialized.commonAdd = true;
                    Controller.api.bindevent();
                    Controller.api.initImageGroups('add');
                    Controller.api.handleUrlParams();
                    Controller.api.waitForDataLoadingCompletion();
                });
            } else {
                // 如果已经加载过，直接执行初始化
                Controller.api.bindevent();
                Controller.api.initImageGroups('add');
                Controller.api.handleUrlParams();
                Controller.api.waitForDataLoadingCompletion();
            }
        },
        
        edit: function () {
            // 防止重复加载commonAdd模块
            if (!Controller._initialized.commonAdd) {
                require(['backend/common/add'], function() {
                    Controller._initialized.commonAdd = true;
                    Controller.api.bindevent();
                    Controller.api.initImageGroups('edit');
                    Controller.api.initTabsHandling();
                    Controller.api.handleUrlParams();
                    Controller.api.waitForDataLoadingCompletion();
                });
            } else {
                // 如果已经加载过，直接执行初始化
                Controller.api.bindevent();
                Controller.api.initImageGroups('edit');
                Controller.api.initTabsHandling();
                Controller.api.handleUrlParams();
                Controller.api.waitForDataLoadingCompletion();
            }
        },
        api: {
            // 初始化选项卡功能
            initTabs: function() {
                // 彻底移除之前可能绑定的所有事件
                $('a[data-toggle="tab"]').off('.slider');
                $(document).off('.slider-tabs');
                
                // 使用命名空间绑定事件，避免重复绑定
                $('a[data-toggle="tab"]').on('shown.bs.tab.slider', function (e) {
                    var target = $(e.target).attr("href").replace('#', '');
                    Controller.api.loadTabData(target);
                });
            },
            
            // 加载选项卡数据
            loadTabData: function(tabType) {
                var tableId = '#table-' + tabType;
                var typeParam = '';
                
                // 根据选项卡类型设置参数
                switch(tabType) {
                    case 'city-home':
                        typeParam = 'city-home';
                        break;
                    case 'teaching-point':
                        typeParam = 'teaching-point';
                        break;
                    case 'teaching-point_sq':
                        typeParam = 'teaching-point_sq';
                        break;
                    case 'school-home':
                        typeParam = 'school-home';
                        break;
                    case 'class-home':
                        typeParam = 'class-home';
                        break;
                    case 'community-subject':
                        typeParam = 'community-subject';
                        break;
                    case 'other':
                        typeParam = 'other';
                        break;
                    default:
                        typeParam = 'city-home';
                }
                
                // 彻底清理表格和相关事件
                Controller.api.cleanupTable(tableId);
                
                // 延迟初始化，确保清理完成
                setTimeout(function() {
                    // 初始化表格
                    $(tableId).bootstrapTable({
                        url: $.fn.bootstrapTable.defaults.extend.index_url + '?type=' + typeParam,
                        pk: 'id',
                        sortName: 'id',
                        columns: [
                            [
                                { checkbox: true },
                                { field: 'id', title: __('Id'), visible: false },
                                { field: 'title', title: "图片名称", operate: 'LIKE', table: $(tableId), class: 'autocontent', formatter: Table.api.formatter.content },
                                { field: 'number', title: "图片位置描述", operate: 'LIKE' },
                                { field: 'image', title: "长图预览", operate: 'LIKE', formatter: Controller.api.formatter.image },
                                { field: 'title_image', title: "方图预览", operate: 'LIKE', formatter: Controller.api.formatter.title_image },
                                { field: "city_id", title: "城市" },
                                { field: "school_id", title: "学校" },
                                { field: "ocation_id", title: "教学点" },
                                { field: 'operate', title: __('Operate'), table: $(tableId), events: Table.api.events.operate, formatter: Table.api.formatter.operate }
                            ]
                        ]
                    });

                    // 延迟绑定事件，确保表格完全初始化
                    setTimeout(function() {
                        Table.api.bindevent($(tableId));
                    }, 200);
                }, 100);
            },
            
            // 新增：彻底清理表格的方法
            cleanupTable: function(tableId) {
                // 1. 销毁Bootstrap Table实例
                if ($.fn.bootstrapTable && $(tableId).data('bootstrap.table')) {
                    $(tableId).bootstrapTable('destroy');
                }
                
                // 2. 移除所有相关事件绑定
                $(tableId).off();
                $('.fixed-table-toolbar').off();
                $('[data-table="' + tableId.replace('#', '') + '"]').off();
                
                // 3. 移除工具栏相关事件
                $('.btn-add, .btn-edit, .btn-del, .btn-import, .btn-export').off('.table');
                
                // 4. 清空表格内容和相关DOM
                $(tableId).empty();
                $(tableId).next('.fixed-table-container').remove();
                $(tableId).siblings('.fixed-table-toolbar').remove();
                
                // 5. 重置表格数据属性
                $(tableId).removeData('bootstrap.table');
                $(tableId).removeAttr('data-toggle');
            },
            
            bindevent: function () {
                Form.api.bindevent($("form[role=form]"));
                                // 监听位置描述选择框变化，自动填入图片宽高并控制教学点显示
                $(document).on('change', '#c-number', function () {
                    var $selectedOption = $(this).find('option:selected');
                    var imageWidth = $selectedOption.attr('data-image-width');
                    var imageHeight = $selectedOption.attr('data-image-height');
                    // 如果选中的option有宽高属性，则填入对应字段
                    if (imageWidth) {
                        $('#c-image-width').val(imageWidth);
                    }
                    if (imageHeight) {
                        $('#c-image-height').val(imageHeight);
                    }
                    // 控制教学点字段的显示/隐藏
                    Controller.api.checkOcationVisibility();
                });
            },
            formatter: {

            },
            
            // 初始化选项卡处理
            initTabsHandling: function() {
                // 选项卡切换事件
                $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
                    var target = $(e.target).attr("href");
                    // 根据选项卡初始化相应功能
                    if (target === '#tab-carousel') {
                        // 轮插图选项卡激活时的处理
                        Controller.api.initImageGroups('edit');
                    } else if (target === '#tab-header') {
                        // 头图选项卡激活时的处理
                        Controller.api.initHeaderImageUpload();
                    } else if (target === '#tab-title') {
                        // 标题图选项卡激活时的处理
                        Controller.api.initTitleImageUpload();
                    }
                });
            },
            
            // 初始化头图上传
            initHeaderImageUpload: function() {
                if (typeof Fast !== 'undefined' && Fast.api && Fast.api.upload) {
                    Fast.api.upload.init($('#plupload-header-image'));
                }
            },
            
            // 初始化标题图上传
            initTitleImageUpload: function() {
                if (typeof Fast !== 'undefined' && Fast.api && Fast.api.upload) {
                    Fast.api.upload.init($('#plupload-title-image'));
                }
                
                // 透明度滑块事件
                $('#c-logo-opacity').on('input', function() {
                    $('#opacity-value').text($(this).val());
                });
                
                // Logo尺寸预设
                $('#c-logo-width, #c-logo-height').on('change', function() {
                    Controller.api.updateLogoPreview();
                });
            },
            
            // 更新Logo预览
            updateLogoPreview: function() {
                var width = $('#c-logo-width').val();
                var height = $('#c-logo-height').val();
                var opacity = $('#c-logo-opacity').val();
                
                // 更新预览样式
                $('#p-title-image img').css({
                    'width': width + 'px',
                    'height': height + 'px',
                    'opacity': opacity
                });
            },
            
            // 处理URL参数
            handleUrlParams: function() {
                var urlParams = Controller.api.getUrlParams();
                
                // 设置位置描述
                if (urlParams.position_desc) {
                    $('#c-number').val(decodeURIComponent(urlParams.position_desc));
                }
                
                // 设置默认图片尺寸（教学点轮播图的标准尺寸）
                $('#c-image-width').val('750');
                $('#c-image-height').val('422');
            },
            
            // 获取URL参数
            getUrlParams: function() {
                var params = {};
                var search = window.location.search;
                if (search) {
                    search = search.substring(1);
                    var pairs = search.split('&');
                    for (var i = 0; i < pairs.length; i++) {
                        var pair = pairs[i].split('=');
                        if (pair.length === 2) {
                            params[pair[0]] = pair[1];
                        }
                    }
                }
                return params;
            },
            // 初始化图片组管理功能
            initImageGroups: function (mode) {
                var imageCount = mode === 'add' ? 0 : 0;
                var maxImages = 5;
                var currentNumber = mode === 'edit' ? $("input[name='row[number]']").val() : '';

                // 图片组模板函数（用于编辑模式）
                function getImageGroupTemplate(index, data) {
                    data = data || {};
                    var hiddenIdField = mode === 'edit' ?
                        `<input type="hidden" name="images[${index}][id]" value="${currentNumber || ''}" />` : '';

                    return `
                        <div class="slider-image-group" data-index="${index}">
                            <div class="panel panel-info">
                                <div class="panel-heading">
                                    <h5 class="panel-title">
                                        <i class="fa fa-image"></i> 图片 ${index}
                                        <button type="button" class="btn btn-xs btn-danger pull-right remove-image-group" style="margin-top: -2px;">
                                            <i class="fa fa-trash"></i> 删除
                                        </button>
                                    </h5>
                                </div>
                                <div class="panel-body" style="padding: 15px;">
                                    <div class="row" style="margin: 0 -8px;">
                                        <div class="col-md-1"></div>
                                        <div class="col-md-3" style="padding: 0 8px;">
                                            <div class="form-group" style="margin-bottom: 0;">
                                                <label class="control-label" style="font-size: 12px; margin-bottom: 5px; white-space: nowrap;">图片标题:</label>
                                                <input type="text" name="images[${index}][title]" class="form-control" style="height: 32px; font-size: 12px;width: 114px !important;" placeholder="请输入图片标题" data-tip="图片标题" value="${data.title || ''}" />
                                                ${hiddenIdField}
                                            </div>
                                        </div>
                                        <div class="col-md-4" style="padding: 0 8px;">
                                            <div class="form-group" style="margin-bottom: 0;">
                                                <label class="control-label" style="font-size: 12px; margin-bottom: 5px; white-space: nowrap;">图片链接:</label>
                                                <input type="text" name="images[${index}][href]" class="form-control" style="height: 32px; font-size: 12px;width: 187px!important;" placeholder="请输入图片链接" data-tip="图片链接" value="${data.href || ''}" />
                                            </div>
                                        </div>
                                        <div class="col-md-3" style="padding: 0 8px;">
                                            <div class="form-group" style="margin-bottom: 0;">
                                                <label class="control-label" style="font-size: 12px; margin-bottom: 5px; white-space: nowrap;">图片地址:</label>
                                                <div class="input-group" style="display: flex; align-items: stretch;">
                                                    <input type="text" name="images[${index}][src]" class="form-control image-src-input" style="height: 32px; font-size: 12px;" placeholder="请选择图片" data-tip="图片地址" value="${data.src || ''}" id="images-${index}-src" />
                                                    <div class="input-group-btn" style="display: flex;">
                                                        <button type="button" class="btn btn-danger plupload" style="height: 32px; padding: 4px 8px; font-size: 11px; white-space: nowrap;" data-input-id="images-${index}-src" data-mimetype="image/*"  data-width="750" data-height="422" data-multiple="false" data-preview-id="p-images-${index}">
                                                            <i class="fa fa-upload"></i>
                                                        </button>
                                                        <button type="button" class="btn btn-success collect-btn" style="height: 32px; padding: 4px 8px; font-size: 11px; white-space: nowrap;" data-group-index="${index}">
                                                            <i class="fa fa-download"></i> 抓取
                                                        </button>
                                                    </div>
                                                </div>
                                                <ul class="row list-inline plupload-preview" id="p-images-${index}" style="margin-top: 8px; margin-bottom: 0;display: none;"></ul>
                                            </div>
                                        </div>
                                        <div class="col-md-1"></div>
                                    </div>
                                    
                                    <!-- 图片状态开关 -->
                                    <div class="row" style="margin: 10px -8px 0 -8px;">
                                        <div class="col-md-1"></div>
                                        <div class="col-md-10" style="padding: 0 8px;">
                                            <div class="form-group" style="margin-bottom: 0;">
                                                <label class="control-label" style="font-size: 12px; margin-bottom: 5px; white-space: nowrap;">图片状态:</label>
                                                <div style="display: flex; align-items: center;">
                                                    <input type="hidden" id="images-${index}-status" name="images[${index}][status]" class="image-status-input" value="${data.status !== undefined ? data.status : '1'}" />
                                                    <a href="javascript:;" data-toggle="switcher" class="btn-switcher ${data.status !== '0' ? 'active' : 'text-gray'}" data-input-id="images-${index}-status" data-yes="1" data-no="0">
                                                        <i class="fa fa-toggle-on fa-2x ${data.status === '0' ? 'fa-flip-horizontal' : ''}"></i>
                                                    </a>
                                                    <div data-favisible="switch=1" class="p-3" style="margin-left: 10px; font-size: 12px;">开启</div>
                                                    <div data-favisible="switch=0" class="p-3" style="margin-left: 10px; font-size: 12px;">禁用</div>
                                                </div>
                                            </div>
                                        </div>
                                        <div class="col-md-1"></div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    `;
                }

                // 更新图片计数显示
                function updateImageCount() {
                    $('#image-count').text(imageCount);
                    if (imageCount >= maxImages) {
                        $('#add-image-group').prop('disabled', true).addClass('disabled');
                    } else {
                        $('#add-image-group').prop('disabled', false).removeClass('disabled');
                    }
                }

                // 为已有图片创建预览
                function createImagePreview($group, imageSrc) {
                    if (!imageSrc) return;
                    
                    var index = $group.data('index');
                    var $previewContainer = $group.find('#p-images-' + index);
                    var $input = $group.find('input[name="images[' + index + '][src]"]');
                    
                    if ($previewContainer.length && imageSrc) {
                        var previewHtml = `
                            <li class="col-xs-3">
                                <div class="img-box">
                                    <img src="${imageSrc}" class="img-responsive" style="max-height: 100px;">
                                    <div class="img-overlay">
                                        <a href="javascript:;" class="btn btn-danger btn-xs img-remove">
                                            <i class="fa fa-trash"></i>
                                        </a>
                                    </div>
                                </div>
                            </li>
                        `;
                        $previewContainer.html(previewHtml).show();
                        
                        // 绑定删除事件
                        $previewContainer.find('.img-remove').on('click', function () {
                            $input.val('');
                            $previewContainer.empty().hide();
                        });
                    }
                }

                // 初始化状态开关
                function initStatusSwitcher($group) {
                    var $switcher = $group.find('.btn-switcher');
                    var $statusInput = $group.find('.image-status-input');
                    
                    $switcher.on('click', function() {
                        var $this = $(this);
                        var inputId = $this.data('input-id');
                        var $input = $('#' + inputId);
                        var yes = $this.data('yes');
                        var no = $this.data('no');
                        
                        if ($this.hasClass('active')) {
                            // 当前是开启状态，切换为禁用
                            $this.removeClass('active').addClass('text-gray');
                            $this.find('i').addClass('fa-flip-horizontal');
                            $input.val(no);
                            $statusInput.val(no);
                        } else {
                            // 当前是禁用状态，切换为开启
                            $this.removeClass('text-gray').addClass('active');
                            $this.find('i').removeClass('fa-flip-horizontal');
                            $input.val(yes);
                            $statusInput.val(yes);
                        }
                        
                        // 更新显示状态文本
                        $group.find('[data-favisible]').hide();
                        $group.find('[data-favisible="switch=' + $input.val() + '"]').show();
                    });
                }

                // 添加图片组（编辑模式）
                function addImageGroup(data) {
                    if (imageCount < maxImages) {
                        imageCount++;
                        var $newGroup = $(getImageGroupTemplate(imageCount, data));
                        $('#slider-images-container').append($newGroup);

                        // 立即初始化上传组件
                        initUploadForGroup($newGroup);

                        // 初始化状态开关
                        initStatusSwitcher($newGroup);

                        // 绑定抓取按钮事件
                        $newGroup.find('.collect-btn').off('click').on('click', Controller.api.handleCollect);

                        // 如果有已有图片数据，创建预览
                        if (data && data.src) {
                            createImagePreview($newGroup, data.src);
                        }

                        updateImageCount();
                        return $newGroup;
                    }
                    return null;
                }

                // 为指定组初始化上传组件
                function initUploadForGroup($group) {
                    // 尝试多次检查Fast是否加载
                    var attempts = 0;
                    var maxAttempts = 10;

                    function tryInitUpload() {
                        attempts++;

                        $group.find('.plupload').each(function () {
                            var $btn = $(this);


                            if (typeof Fast !== 'undefined' && Fast.api && Fast.api.upload) {
                                try {
                                    Fast.api.upload.init($btn);
                                } catch (e) {
                                    // 如果Fast初始化失败，使用备用方案
                                    initFallbackUpload($btn);
                                }
                            } else if (attempts >= maxAttempts) {
                                initFallbackUpload($btn);
                            } else {
                                // 继续等待Fast加载
                                setTimeout(tryInitUpload, 200);
                                return;
                            }
                        });
                    }

                    // 备用上传方案
                    function initFallbackUpload($btn) {
                        $btn.off('click').on('click', function () {
                            var inputId = $(this).data('input-id');
                            var $input = $('#' + inputId);
                            var $previewContainer = $('#' + $btn.data('preview-id'));

                            // 创建文件选择器
                            var fileInput = document.createElement('input');
                            fileInput.type = 'file';
                            fileInput.accept = 'image/*';
                            fileInput.onchange = function (e) {
                                var file = e.target.files[0];
                                if (file) {
                                    // 显示上传中状态
                                    $btn.prop('disabled', true);
                                    var originalHtml = $btn.html();
                                    $btn.html('<i class="fa fa-spinner fa-spin"></i> 上传中...');

                                    // 立即上传文件
                                    uploadFileToServer(file, function (success, result) {
                                        // 恢复按钮状态
                                        $btn.prop('disabled', false);
                                        $btn.html(originalHtml);

                                        if (success && result.url) {
                                            // 上传成功，将服务器返回的URL填入输入框
                                            $input.val(result.url);

                                            // 显示预览图片
                                            if ($previewContainer.length) {
                                                var previewHtml = `
                                                    <li class="col-xs-3">
                                                        <div class="img-box">
                                                            <img src="${result.url}" class="img-responsive" style="max-height: 100px;">
                                                            <div class="img-overlay">
                                                                <a href="javascript:;" class="btn btn-danger btn-xs img-remove">
                                                                    <i class="fa fa-trash"></i>
                                                                </a>
                                                            </div>
                                                        </div>
                                                    </li>
                                                `;
                                                $previewContainer.html(previewHtml);

                                                // 绑定删除事件
                                                $previewContainer.find('.img-remove').on('click', function () {
                                                    $input.val('');
                                                    $previewContainer.empty();
                                                });
                                            }

                                            layer.msg('文件上传成功！', { icon: 1 });
                                        } else {
                                            layer.msg('文件上传失败: ' + (result.message || '未知错误'), { icon: 2 });
                                        }
                                    });
                                }
                            };
                            fileInput.click();
                        });
                    }

                    // 上传文件到服务器
                    function uploadFileToServer(file, callback) {
                        var formData = new FormData();
                        formData.append('file', file);

                        // 从页面输入框获取图片裁剪参数
                        var imageWidth = $('#c-image-width').val() || '750';   // 默认宽度750
                        var imageHeight = $('#c-image-height').val() || '422'; // 默认高度422

                        formData.append('image_width', imageWidth);
                        formData.append('image_height', imageHeight);
                        // 尝试获取上传URL，可能需要根据实际项目配置调整
                        var uploadUrl = '/admin/ajax/upload'; // 默认上传地址
                        // 如果有全局配置，使用全局配置的上传地址
                        if (typeof Config !== 'undefined' && Config.upload && Config.upload.uploadurl) {
                            uploadUrl = Config.upload.uploadurl;
                        } else if (typeof Fast !== 'undefined' && Fast.config && Fast.config.upload_url) {
                            uploadUrl = Fast.config.upload_url;
                        }

                        $.ajax({
                            url: uploadUrl,
                            type: 'POST',
                            data: formData,
                            processData: false,
                            contentType: false,
                            dataType: 'json',
                            success: function (response) {
                                if (response.code === 1 || response.code === 200) {
                                    // 上传成功，根据实际API响应格式提取URL
                                    var fileUrl = '';

                                    if (response.data && typeof response.data === 'object') {
                                        // 优先使用url（相对路径），其次使用fullurl
                                        fileUrl = response.data.url || response.data.fullurl;
                                    } else if (response.data && typeof response.data === 'string') {
                                        // 如果data是字符串，直接使用
                                        fileUrl = response.data;
                                    } else if (response.url) {
                                        // 备用：使用response.url
                                        fileUrl = response.url;
                                    } else if (response.file_url) {
                                        // 备用：使用response.file_url
                                        fileUrl = response.file_url;
                                    }
                                    if (fileUrl) {
                                        callback(true, { url: fileUrl, message: response.msg || '上传成功' });
                                    } else {
                                        callback(false, { message: '服务器未返回文件地址' });
                                    }
                                } else {
                                    // 上传失败
                                    callback(false, { message: response.msg || response.message || '上传失败' });
                                }
                            },
                            error: function (xhr, status, error) {
                                var errorMsg = '网络错误';

                                if (xhr.responseJSON && xhr.responseJSON.msg) {
                                    errorMsg = xhr.responseJSON.msg;
                                } else if (xhr.responseText) {
                                    try {
                                        var response = JSON.parse(xhr.responseText);
                                        errorMsg = response.msg || response.message || errorMsg;
                                    } catch (e) {
                                        errorMsg = '服务器响应格式错误';
                                    }
                                }

                                callback(false, { message: errorMsg });
                            }
                        });
                    }

                    // 开始尝试初始化
                    setTimeout(tryInitUpload, 100);
                }

                // 添加模式的图片组显示/隐藏
                function showImageGroup(index) {
                    var $group = $('.slider-image-group[data-index="' + index + '"]');
                    $group.show();

                    // 初始化上传组件
                    initUploadForGroup($group);

                    // 绑定抓取按钮事件
                    $group.find('.collect-btn').off('click').on('click', Controller.api.handleCollect);
                }

                // 添加图片按钮事件
                $('#add-image-group').click(function () {
                    if (mode === 'add') {
                        // 添加模式：动态创建新的图片组（和编辑模式一样）
                        if (imageCount < maxImages) {
                            var $newGroup = addImageGroup();
                            if ($newGroup) {
                                // addImageGroup函数内部已经处理了计数器更新和上传组件初始化
                            }
                        }
                    } else {
                        // 编辑模式：动态创建新的图片组
                        var $newGroup = addImageGroup();
                        // addImageGroup函数内部已经处理了上传组件的初始化
                    }
                });

                // 删除图片组事件
                $(document).on('click', '.remove-image-group', function () {
                    var $group = $(this).closest('.slider-image-group');
                    var index = $group.data('index');

                    if (imageCount > 1) {
                        if (mode === 'add') {
                            // 添加模式：隐藏并清空表单数据
                            $group.hide();
                            $group.find('input[type="text"]').val('');
                            $group.find('.plupload-preview').empty();

                            // 重新计算显示的图片数量
                            imageCount = $('.slider-image-group:visible').length;
                        } else {
                            // 编辑模式：直接移除元素
                            $group.remove();
                            imageCount--;
                        }
                        updateImageCount();
                    } else {
                        layer.msg('至少需要保留一个图片组', { icon: 2 });
                    }
                });

                // 编辑模式：加载现有数据
                function loadExistingImages() {
                    // 直接从隐藏字段读取 row[image] 数据
                    var imageData = $("input[name='row[image]']").val();

                    // 添加更严格的数据验证
                    if (imageData && 
                        typeof imageData === 'string' && 
                        imageData.trim() !== '' && 
                        imageData !== 'undefined' && 
                        imageData !== 'null') {
                        try {
                            // 解析JSON格式的图片数据
                            var images = JSON.parse(imageData);

                            if (images && typeof images === 'object') {
                                // 遍历图片数据并创建图片组
                                $.each(images, function (key, item) {
                                    if (item && typeof item === 'object') {
                                        addImageGroup(item);
                                    }
                                });
                            } else {
                                // 数据格式不正确，添加一个空的图片组
                                addImageGroup();
                            }
                        } catch (e) {
                            // 解析失败，添加一个空的图片组
                            addImageGroup();
                        }
                    } else {
                        // 没有现有数据，添加一个空的图片组
                        addImageGroup();
                    }
                    
                    // 为所有已加载的图片组初始化状态开关
                    setTimeout(function() {
                        $('.slider-image-group').each(function() {
                            initStatusSwitcher($(this));
                        });
                    }, 100);
                }

                // 添加模式：修复上传组件的data-input-id属性并绑定抓取按钮
                function fixUploadInputIds() {
                    $('.plupload').each(function () {
                        var inputId = $(this).data('input-id');
                        if (inputId) {
                            var $input = $(this).closest('.form-group').find('input[type="text"]');
                            if ($input.length) {
                                $input.attr('id', inputId);
                            }
                        }
                    });
                    // 绑定抓取按钮事件
                    $('.collect-btn').off('click').on('click', Controller.api.handleCollect);

                    // 初始化所有现有的上传组件
                    $('.slider-image-group:visible').each(function () {
                        initUploadForGroup($(this));
                    });
                }

                // 检查Fast是否加载
                function checkFastLoaded() {
                    if (typeof Fast === 'undefined') {
                        return false;
                    }
                    if (!Fast.api || !Fast.api.upload) {
                        return false;
                    }
                    return true;
                }

                // 初始化
                if (mode === 'add') {
                    imageCount = 0; // 从0开始，因为还没有创建任何图片组
                    updateImageCount();
                    // 立即执行，不等待Fast加载
                    fixUploadInputIds();
                } else if (mode === 'edit') {
                    // 编辑模式：加载现有图片数据
                    loadExistingImages();
                }

                // 添加全局Ctrl+V快捷键监听
                Controller.api.initGlobalPasteListener();
            },

            // 处理抓取请求
            handleCollect: function () {
                var $btn = $(this);
                var groupIndex = $btn.data('group-index');

                // 获取当前组的链接输入框
                var $hrefInput = $btn.closest('.slider-image-group').find('input[name*="[href]"]');
                var s_url = $hrefInput.val().trim();

                // 如果输入框为空，尝试从剪贴板获取链接
                if (!s_url) {
                    Controller.api.tryGetClipboardUrl(function (clipboardUrl) {
                        if (clipboardUrl) {
                            // 填入链接并执行抓取
                            $hrefInput.val(clipboardUrl);
                            Controller.api.performCollect($btn, clipboardUrl);
                        } else {
                            // 剪贴板中没有有效链接，提示用户输入
                            layer.msg('请先在图片链接框中输入要抓取的网址', { icon: 2 });
                            $hrefInput.focus();
                        }
                    });
                    return;
                }

                // 如果输入框有内容，直接抓取
                Controller.api.performCollect($btn, s_url);
            },

            // 尝试从剪贴板获取URL
            tryGetClipboardUrl: function (callback) {
                if (navigator.clipboard && navigator.clipboard.readText) {
                    // 现代浏览器的剪贴板API
                    navigator.clipboard.readText().then(function (text) {
                        var trimmedText = text.trim();
                        if (trimmedText && Controller.api.isValidUrl(trimmedText) && trimmedText.toLowerCase().startsWith('http')) {
                            callback(trimmedText);
                        } else {
                            callback(null);
                        }
                    }).catch(function (err) {
                        // 如果剪贴板访问失败，返回null
                        callback(null);
                    });
                } else {
                    // 不支持剪贴板API的浏览器
                    callback(null);
                }
            },

            // 执行抓取操作
            performCollect: function ($btn, s_url) {
                // 验证URL格式
                if (!Controller.api.isValidUrl(s_url)) {
                    layer.msg('请输入正确的网址格式', { icon: 2 });
                    return;
                }

                // 显示加载状态
                var originalText = $btn.html();
                $btn.html('<i class="fa fa-spinner fa-spin"></i> 抓取中...').prop('disabled', true);

                // 使用JSONP方式发送请求
                Controller.api.jsonpRequest({
                    url: 'https://collect.longsunhd.com/collect/index.php',
                    data: {
                        s_url: encodeURIComponent(s_url),
                        gather_type: 1
                    },
                    success: function (data) {
                        if (data) {
                            var $group = $btn.closest('.slider-image-group');

                            // 填入标题（过滤空格）
                            if (data.subject) {
                                var cleanTitle = data.subject.replace(/\s+/g, ' ').trim();
                                $group.find('input[name*="[title]"]').val(cleanTitle);
                            }

                            // 填入图片地址
                            if (data.thumb) {
                                // 处理thumb字段，如果是数组取第一个元素
                                var thumbValue = Array.isArray(data.thumb) ? data.thumb[0] : data.thumb;
                                $group.find('input[name*="[src]"]').val(thumbValue);
                            }

                            layer.msg('抓取成功！', { icon: 1 });
                        } else {
                            layer.msg('抓取失败，返回数据格式错误', { icon: 2 });
                        }
                    },
                    error: function (error) {
                        layer.msg('抓取失败：' + error, { icon: 2 });
                    },
                    complete: function () {
                        // 恢复按钮状态
                        $btn.html(originalText).prop('disabled', false);
                    }
                });
            },

            // JSONP请求函数
            jsonpRequest: function (options) {
                var callbackName = 'jsonp_callback_' + Math.round(100000 * Math.random());
                var script = document.createElement('script');
                var params = [];

                // 添加callback参数
                options.data.callback = callbackName;

                // 构建参数字符串
                for (var key in options.data) {
                    if (options.data.hasOwnProperty(key)) {
                        params.push(encodeURIComponent(key) + '=' + encodeURIComponent(options.data[key]));
                    }
                }

                // 设置全局回调函数
                window[callbackName] = function (data) {
                    try {
                        if (options.success) {
                            options.success(data);
                        }
                    } catch (e) {
                        if (options.error) {
                            options.error(e.message);
                        }
                    } finally {
                        // 清理
                        document.head.removeChild(script);
                        delete window[callbackName];
                        if (options.complete) {
                            options.complete();
                        }
                    }
                };

                // 设置超时处理
                var timeout = setTimeout(function () {
                    if (window[callbackName]) {
                        if (options.error) {
                            options.error('请求超时');
                        }
                        document.head.removeChild(script);
                        delete window[callbackName];
                        if (options.complete) {
                            options.complete();
                        }
                    }
                }, 30000); // 30秒超时

                // 设置script标签
                script.src = options.url + '?' + params.join('&');
                script.onerror = function () {
                    clearTimeout(timeout);
                    if (window[callbackName]) {
                        if (options.error) {
                            options.error('网络错误');
                        }
                        document.head.removeChild(script);
                        delete window[callbackName];
                        if (options.complete) {
                            options.complete();
                        }
                    }
                };

                // 添加到页面
                document.head.appendChild(script);
            },

            // URL格式验证函数
            isValidUrl: function (string) {
                try {
                    new URL(string);
                    return true;
                } catch (_) {
                    return false;
                }
            },

            // 初始化全局粘贴监听器
            initGlobalPasteListener: function () {
                // 防止重复绑定
                $(document).off('keydown.sliderImgsPaste');

                $(document).on('keydown.sliderImgsPaste', function (e) {
                    // 检测Ctrl+V组合键
                    if (e.ctrlKey && e.keyCode === 86) {
                        // 检查是否在输入框中
                        var $target = $(e.target);
                        if ($target.is('input[type="text"], textarea')) {
                            // 如果在输入框中，不拦截，让正常粘贴生效
                            return;
                        }

                        // 防止默认粘贴行为
                        e.preventDefault();

                        // 执行自定义粘贴逻辑
                        Controller.api.handleGlobalPaste();
                    }
                });
            },

            // 处理全局粘贴事件
            handleGlobalPaste: function () {
                // 查找第一个空的图片组
                var $emptyGroup = Controller.api.findFirstEmptyGroup();

                if (!$emptyGroup) {
                    layer.msg('所有图片组都已有内容，请手动清空一个组或添加新组', { icon: 2 });
                    return;
                }

                // 从剪贴板获取内容
                Controller.api.tryGetClipboardUrl(function (clipboardUrl) {
                    if (clipboardUrl) {
                        // 填入链接并执行抓取
                        var $hrefInput = $emptyGroup.find('input[name*="[href]"]');
                        var $collectBtn = $emptyGroup.find('.collect-btn');

                        $hrefInput.val(clipboardUrl);

                        // 执行抓取
                        Controller.api.performCollect($collectBtn, clipboardUrl);

                        // 显示提示
                        layer.msg('已自动填入链接并开始抓取', { icon: 1, time: 2000 });
                    } else {
                        layer.msg('剪贴板中没有有效的链接', { icon: 2 });
                    }
                });
            },

            // 查找第一个空的图片组
            findFirstEmptyGroup: function () {
                var $emptyGroup = null;

                $('.slider-image-group:visible').each(function () {
                    var $group = $(this);
                    var $hrefInput = $group.find('input[name*="[href]"]');
                    var $titleInput = $group.find('input[name*="[title]"]');
                    var $srcInput = $group.find('input[name*="[src]"]');

                    // 检查是否为空组（所有输入框都为空）
                    if (!$hrefInput.val().trim() && !$titleInput.val().trim() && !$srcInput.val().trim()) {
                        $emptyGroup = $group;
                        return false; // 跳出循环
                    }
                });

                return $emptyGroup;
            },

            // 重新整理表单输入框的name属性
            reorderFormInputs: function () {
                var index = 1;
                var visibleGroups = $('.slider-image-group:visible');
                // 遍历所有可见的图片组
                visibleGroups.each(function () {
                    var $group = $(this);
                    var originalIndex = $group.data('index');
                    // 更新输入框的name属性
                    var $titleInput = $group.find('input[name*="[title]"]');
                    var $hrefInput = $group.find('input[name*="[href]"]');
                    var $srcInput = $group.find('input[name*="[src]"]');
                    var $statusInput = $group.find('input[name*="[status]"]');

                    if ($titleInput.length > 0) {
                        var oldName = $titleInput.attr('name');
                        $titleInput.attr('name', 'images[' + index + '][title]');

                    }
                    if ($hrefInput.length > 0) {
                        $hrefInput.attr('name', 'images[' + index + '][href]');
                    }
                    if ($srcInput.length > 0) {
                        $srcInput.attr('name', 'images[' + index + '][src]');
                    }
                    if ($statusInput.length > 0) {
                        $statusInput.attr('name', 'images[' + index + '][status]');
                    }

                    index++;
                });
                
                // 更新图片数据到隐藏字段
                Controller.api.updateImageField();
            },
            
            // 更新图片数据到隐藏字段
            updateImageField: function() {
                var images = [];
                $('.slider-image-group:visible').each(function() {
                    var $group = $(this);
                    var title = $group.find('input[name*="[title]"]').val() || '';
                    var href = $group.find('input[name*="[href]"]').val() || '';
                    var src = $group.find('input[name*="[src]"]').val() || '';
                    var status = $group.find('input[name*="[status]"]').val() || '1';
                    
                    if (title || href || src) {
                        images.push({
                            title: title,
                            href: href,
                            src: src,
                            status: status
                        });
                    }
                });
                
                // 更新隐藏字段的值
                $("input[name='row[image]']").val(JSON.stringify(images));
            },
            
            // 检查位置描述并控制教学点和班级显示
            checkOcationVisibility: function() {
                var selectedValue = $('#c-number').val();
                var $ocationGroup = $('#c-ocation_id').closest('.form-group');
                var $ocationsqGroup = $('#c-ocation_id_sq').closest('.form-group');
                var $classGroup = $('#c-classes_id').closest('.form-group');
                var $schoolGroup = $('#c-school_id').closest('.form-group');
                var $cityGroup = $('#city').closest('.form-group');
                var $communityCourseGroup = $('#c-communityCourse_id').closest('.form-group');
                // 当位置描述选择ID为42（教学点首页轮播图）时显示教学点下拉框
                if (selectedValue == 42) {
                    //教学点首页轮播图
                    $ocationGroup.show().find('input, select').prop('disabled', false);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                } else if (selectedValue == 49) {
                    //社区教学点首页轮播图
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.show().find('input, select').prop('disabled', false);
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                } else if (selectedValue == 45) {
                    //班级首页轮播图
                    $classGroup.show().find('input, select').prop('disabled', false);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                }else if (selectedValue == 44) {
                    //学校首页轮播图
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.show().find('input, select').prop('disabled', false);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                }else if (selectedValue == 46) {
                    //学分领取广告栏
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                }else if (selectedValue == 47) {
                    //学分领取广告栏
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                }else if (selectedValue == 41) {
                    //city城市首页轮播图
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.show().find('input, select').prop('disabled', false);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                }else if (selectedValue == 48) {
                    //communityCourseGroup社区学科轮播图
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.show().find('input, select').prop('disabled', false);
                } else {
                    $ocationGroup.hide().find('input, select').prop('disabled', true);
                    $ocationsqGroup.hide().find('input, select').prop('disabled', true);
                    $classGroup.hide().find('input, select').prop('disabled', true);
                    $schoolGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $cityGroup.hide().find('input, select').val(0).prop('disabled', true);
                    $communityCourseGroup.hide().find('input, select').prop('disabled', true);
                }
            },
            
            // 等待位置描述和教学点组件数据加载完成
            waitForDataLoadingCompletion: function() {
                var positionDescLoaded = false;
                var ocationLoaded = false;
                var classesLoaded = false;
                // 检查位置描述组件是否加载完成
                function checkPositionDescLoaded() {
                    var $numberSelect = $('#c-number');
                    if ($numberSelect.length > 0) {
                        var optionCount = $numberSelect.find('option').length;
                        if (optionCount > 1) { // 除了默认选项外还有其他选项
                            positionDescLoaded = true;
                            return true;
                        }
                    }
                    return false;
                }
                
                // 检查教学点组件是否加载完成
                function checkOcationLoaded() {
                    var $ocationSelect = $('#c-ocation_id');
                    if ($ocationSelect.length > 0) {
                        var optionCount = $ocationSelect.find('option').length;
                        if (optionCount > 0) { // 有选项就算加载完成（可能只有默认选项）
                            ocationLoaded = true;
                            return true;
                        }
                    } else {
                        // 如果页面上没有教学点组件，也算加载完成
                        ocationLoaded = true;
                        return true;
                    }
                    return false;
                }
                
                // 检查班级组件是否加载完成
                function checkClassesLoaded() {
                    var $classesSelect = $('#c-classes_id');
                    if ($classesSelect.length > 0) {
                        var optionCount = $classesSelect.find('option').length;
                        if (optionCount > 0) { // 有选项就算加载完成（可能只有默认选项）
                            classesLoaded = true;
                            return true;
                        }
                    } else {
                        // 如果页面上没有班级组件，也算加载完成
                        classesLoaded = true;
                        return true;
                    }
                    return false;
                }
                
                // 检查所有组件是否都加载完成
                function checkAllLoaded() {
                    if (positionDescLoaded && ocationLoaded && classesLoaded) {
                        Controller.api.initOcationState();
                        return true;
                    }
                    return false;
                }
                
                // 立即检查一次
                checkPositionDescLoaded();
                checkOcationLoaded();
                checkClassesLoaded();
                
                if (checkAllLoaded()) {
                    return; // 已经全部加载完成
                }
                
                // 定期检查数据加载状态
                var checkInterval = setInterval(function() {
                    if (!positionDescLoaded) {
                        checkPositionDescLoaded();
                    }
                    if (!ocationLoaded) {
                        checkOcationLoaded();
                    }
                    if (!classesLoaded) {
                        checkClassesLoaded();
                    }
                    
                    if (checkAllLoaded()) {
                        clearInterval(checkInterval);
                    }
                }, 200); // 每200ms检查一次
                
                // 设置超时，避免无限等待
                setTimeout(function() {
                    if (!positionDescLoaded || !ocationLoaded || !classesLoaded) {
                        clearInterval(checkInterval);
                        Controller.api.initOcationState();
                    }
                }, 10000); // 10秒超时
            },
            
            // 初始化教学点和班级显示逻辑
            initOcationState: function() {
                    var urlParams = Controller.api.getUrlParams();
                    // 确保教学点和班级字段初始状态为隐藏
                    var $ocationGroup = $('#c-ocation_id').closest('.form-group');
                    var $classGroup = $('#c-classes_id').closest('.form-group');
                    $ocationGroup.hide();
                    $classGroup.hide();
                    
                    // 处理URL参数
                    if (urlParams.ocation_id) {
                        // 自动设置位置描述为教学点首页轮播图（ID=42）
                        $('#c-number').val(42);
                        Controller.api.lockSelectElement('#c-number', '位置描述已锁定');

                        // 显示教学点字段
                        $ocationGroup.show();
                        
                        // 触发change2事件加载教学点数据，并在加载完成后选中指定的教学点
                        setTimeout(function() {
                            // 监听教学点数据加载完成事件
                            var checkDataLoaded = setInterval(function() {
                                var optionCount = $('#c-ocation_id option').length;
                                if (optionCount > 1) { // 除了默认的"请选择教学点"选项外还有其他选项
                                    clearInterval(checkDataLoaded);
                                    // 选中指定的教学点并锁定
                                    $('#c-ocation_id').val(urlParams.ocation_id);
                                    Controller.api.lockSelectElement('#c-ocation_id', '教学点已锁定，无法更改');
                                }
                            }, 100);
                       }, 1000);
                    } else if (urlParams.classes_id) {
                        // 自动设置位置描述为班级首页轮播图（ID=45）
                        $('#c-number').val(45);
                        Controller.api.lockSelectElement('#c-number', '位置描述已锁定');
                        
                        // 显示班级字段
                        $classGroup.show();
                        
                        // 触发change2事件加载班级数据，并在加载完成后选中指定的班级
                        setTimeout(function() {
                            // 监听班级数据加载完成事件
                            var checkDataLoaded = setInterval(function() {
                                var optionCount = $('#c-classes_id option').length;
                                if (optionCount > 1) { // 除了默认的"请选择班级"选项外还有其他选项
                                    clearInterval(checkDataLoaded);
                                    // 选中指定的班级并锁定
                                    $('#c-classes_id').val(urlParams.classes_id);
                                    
                                    Controller.api.lockSelectElement('#c-classes_id', '班级已锁定，无法更改');
                                }
                            }, 100);
                        }, 1000);
                    } else if (urlParams.position_desc) {
                        // 如果有位置描述参数，设置位置描述
                        $('#c-number').val(decodeURIComponent(urlParams.position_desc));
                        // 检查位置描述并控制教学点和班级显示
                        Controller.api.checkOcationVisibility();
                    } else {
                        // 没有URL参数时的正常检查
                        Controller.api.checkOcationVisibility();
                    }
            },
            
            // 锁定下拉框选择，真正阻止用户更改
            lockSelectElement: function(selector, message) {
                var $element = $(selector);
                if ($element.length === 0) {
                    return;
                }
                // 获取当前选中的值
                var currentValue = $element.val();
                var elementName = $element.attr('name');
                
                // 方法1: 创建隐藏input保存当前值
                if (currentValue && elementName) {
                    // 检查是否已经存在隐藏字段，避免重复创建
                    var hiddenFieldId = 'hidden_' + selector.replace('#', '').replace(/[^a-zA-Z0-9]/g, '_');
                    if ($('#' + hiddenFieldId).length === 0) {
                        var $hiddenInput = $('<input type="hidden" id="' + hiddenFieldId + '" name="' + elementName + '" value="' + currentValue + '" />');
                        $element.after($hiddenInput);
                    } else {
                        // 更新现有隐藏字段的值
                        $('#' + hiddenFieldId).val(currentValue);
                    }
                }
                
                // 方法2: 禁用下拉框
                $element.prop('disabled', true);
                
                // 方法3: 添加视觉样式表示已锁定
                $element.addClass('locked-select');
                
                // 方法4: 在下拉框后添加锁定图标和提示
                // 先检查是否已存在锁定指示器，避免重复添加
                if ($element.next('.lock-indicator').length === 0) {
                    var $lockIcon = $('<span class="lock-indicator"><i class="fa fa-lock text-warning" title="' + message + '"></i> <small class="text-muted">' + message + '</small></span>');
                    // 如果有隐藏字段，将锁定图标放在隐藏字段后面
                    var $nextElement = $element.next('input[type="hidden"]');
                    if ($nextElement.length > 0) {
                        $nextElement.after($lockIcon);
                    } else {
                        $element.after($lockIcon);
                    }
                }
                
                // 方法5: 阻止所有可能的更改事件
                $element.off('change.lock mousedown.lock keydown.lock click.lock focus.lock');
                $element.on('change.lock mousedown.lock keydown.lock click.lock focus.lock', function(e) {
                    e.preventDefault();
                    e.stopPropagation();
                    
                    // 显示提示消息
                    if (typeof layer !== 'undefined') {
                        layer.msg(message, {icon: 0, time: 2000});
                    } else if (typeof Toastr !== 'undefined') {
                        Toastr.warning(message);
                    } else {
                        alert(message);
                    }
                    
                    return false;
                });
                
                // 方法6: 阻止鼠标右键菜单
                $element.on('contextmenu.lock', function(e) {
                    e.preventDefault();
                    return false;
                });
                
                // 方法7: 添加CSS样式使其看起来不可操作
                if (!$('#lock-select-styles').length) {
                    $('<style id="lock-select-styles">.locked-select { background-color: #f5f5f5 !important; border-color: #ddd !important; cursor: not-allowed !important; } .lock-indicator { margin-left: 10px; }</style>').appendTo('head');
                }
            },
            
            // 解锁下拉框选择
            unlockSelectElement: function(selector) {
                var $element = $(selector);
                if ($element.length === 0) {
                    return;
                }
                // 获取对应的隐藏字段ID
                var hiddenFieldId = 'hidden_' + selector.replace('#', '').replace(/[^a-zA-Z0-9]/g, '_');
                var $hiddenField = $('#' + hiddenFieldId);
                
                // 如果存在隐藏字段，将其值还原到原始下拉框
                if ($hiddenField.length > 0) {
                    var hiddenValue = $hiddenField.val();
                    if (hiddenValue) {
                        $element.val(hiddenValue);
                    }
                    // 移除隐藏字段
                    $hiddenField.remove();
                }
                
                // 恢复下拉框功能
                $element.prop('disabled', false);
                $element.removeClass('locked-select');
                
                // 移除锁定图标和提示
                $element.siblings('.lock-indicator').remove();
                
                // 解除事件绑定
                $element.off('change.lock mousedown.lock keydown.lock click.lock focus.lock contextmenu.lock');
            },
            
            // 图片预览
            formatter: {
                image: function (value, row, index) {
                    //value格式如：{"1":{"title":"","id":"","href":"","src":"\/uploads\/20250924\/a1d8974d2a8fcca2fd6b83ceac5464b8.png"}}
                    //将数组全部遍历取出src
                    if (value) {
                        var result = '';
                        $.each(value, function (index, item) {
                            result += '<img src="' + item.src + '" alt="" style="width: 200px; margin-right: 5px;">';
                        });
                        return result;
                    }
                    return '';
                },
                title_image: function (value, row, index) {
                    if (value) {
                        return '<img src="' + value + '" alt="" style="width: 120px; margin-right: 5px;">';
                    }
                    return '';
                }
            },
            
        }
    };
    return Controller;
});